local fn = vim.fn

-- Automatically install packer
local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
if fn.empty(fn.glob(install_path)) > 0 then
    PACKER_BOOTSTRAP = fn.system {
        "git",
        "clone",
        "--depth",
        "1",
        "https://github.com/wbthomason/packer.nvim",
        install_path,
    }
    print "Installing packer close and reopen Neovim..."
    vim.cmd [[packadd packer.nvim]]
end

-- Autocommand that reloads neovim whenever you save the plugins.lua file
vim.cmd [[
  augroup packer_user_config
  autocmd!
  autocmd BufWritePost plugins.lua source <afile> | PackerSync
  augroup end
]]

vim.cmd [[
if has('win32')
  let g:sqlite_clib_path = 'C:/Windows/System32/sqlite3.dll'
endif
]]

-- Use a protected call so we don't error out on first use
local status_ok, packer = pcall(require, "packer")
if not status_ok then
    return
end

-- Have packer use a popup window
packer.init {
    display = {
        open_fn = function()
            return require("packer.util").float { border = "rounded" }
        end,
    },
    config = { max_jobs=4, },
}

-- Install your plugins here
return packer.startup(function(use)
    -- My plugins here
    use "wbthomason/packer.nvim" -- Have packer manage itself
    use "nvim-lua/popup.nvim" -- An implementation of the Popup API from vim in Neovim
    use "nvim-lua/plenary.nvim" -- Useful lua functions used ny lots of plugins
    use "windwp/nvim-autopairs" -- Autopairs, integrates with both cmp and treesitter
    use "numToStr/Comment.nvim" -- Easily comment stuff
    use "kyazdani42/nvim-web-devicons"
    use "kyazdani42/nvim-tree.lua"
    use {'akinsho/bufferline.nvim', tag = "v3.*", requires = 'nvim-tree/nvim-web-devicons'}
    use "moll/vim-bbye"
    use "nvim-lualine/lualine.nvim"
    use "arkav/lualine-lsp-progress"
    use {"akinsho/toggleterm.nvim", tag = 'v*.*', config = function()
        require("toggleterm").setup()
    end}
    use "nathom/filetype.nvim"
    use 'rcarriga/nvim-notify'
    use "folke/noice.nvim"
    use "nvim-zh/colorful-winsep.nvim"
    use "ahmedkhalf/project.nvim"
    use "lewis6991/impatient.nvim"
    --  use "lukas-reineke/indent-blankline.nvim"
    use "goolord/alpha-nvim"
    use "antoinemadec/FixCursorHold.nvim" -- This is needed to fix lsp doc highlight
    use "folke/which-key.nvim"
    use {"RRethy/vim-illuminate", branch = 'master'}
    use 'gelguy/wilder.nvim'
    use 'stevearc/profile.nvim'
    -- Colorschemes
    use { "bluz71/vim-moonfly-colors", as = "moonfly" }
    -- use "lunarvim/colorschemes" -- A bunch of colorschemes you can try out
    -- use 'KeitaNakamura/neodark.vim'
    -- use "lunarvim/darkplus.nvim"
    -- use 'mhartington/oceanic-next'
    --use({
    --    "catppuccin/nvim",
    --    as = "catppuccin"
    ---})
    use "rebelot/kanagawa.nvim"
--    use "themercorp/themer.lua"
--    use({
--        "themercorp/themer.lua",
--        config = function()
--          require("themer").setup({
--              colorscheme = "gruvbox-material-dark-medium",
--              styles = {
--                    ["function"] = { style = 'italic' },
--                     functionbuiltin = { style = 'italic' },
--                     variable = { style = 'italic' },
--                      variableBuiltIn = { style = 'italic' },
--                    parameter  = { style = 'italic' },
--              },
--          })
--        end
--    })

    -- cmp plugins
    use "hrsh7th/nvim-cmp" -- The completion plugin
    use "hrsh7th/cmp-buffer" -- buffer completions
    use "hrsh7th/cmp-path" -- path completions
    use "hrsh7th/cmp-cmdline" -- cmdline completions
    use "saadparwaiz1/cmp_luasnip" -- snippet completions
    use "hrsh7th/cmp-nvim-lsp"

    -- snippets
    use "L3MON4D3/LuaSnip" --snippet engine
    use "rafamadriz/friendly-snippets" -- a bunch of snippets to use

    -- LSP
    use {
        "williamboman/mason.nvim",
        "williamboman/mason-lspconfig.nvim",
        "neovim/nvim-lspconfig",
    }
    use "tamago324/nlsp-settings.nvim" -- language server settings defined in json for
--    use "jose-elias-alvarez/null-ls.nvim" -- for formatters and linters
    use "kosayoda/nvim-lightbulb"
    use "ray-x/lsp_signature.nvim"

    -- Telescope
    use 'jremmen/vim-ripgrep'
    use 'BurntSushi/ripgrep'
    use {
        "nvim-telescope/telescope.nvim",
        requires = {
            { "nvim-telescope/telescope-live-grep-args.nvim" },
        },
        config = function()
            require("telescope").load_extension("live_grep_args")
        end
    }
    use { 'junegunn/fzf', run = ":call fzf#install()" }
    use {'nvim-telescope/telescope-fzf-native.nvim', run = 'make' }
    use 'nvim-telescope/telescope-ui-select.nvim'
    use 'fannheyward/telescope-coc.nvim'
    use 'fcying/telescope-ctags-outline.nvim'
    use {
        "nvim-telescope/telescope-frecency.nvim",
        config = function()
            require"telescope".load_extension("frecency")
            require("telescope").load_extension("lazygit")
        end,
        requires = {"tami5/sqlite.lua"}
    }

    -- Treesitter
    use {
        "nvim-treesitter/nvim-treesitter",
        run = ":TSUpdate",
    }
    use "JoosepAlviste/nvim-ts-context-commentstring"

    use {
        "SmiteshP/nvim-navic",
        requires = "neovim/nvim-lspconfig"
    }

    -- Git
    use "lewis6991/gitsigns.nvim"
    use "kdheepak/lazygit.nvim"
    use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim' }


    use 'rkitover/vimpager'
    use 'haya14busa/vim-asterisk'
    use 'jiangmiao/auto-pairs'
    use 'Shougo/neopairs.vim'
    use 'mbbill/undotree'

    use 'vim-scripts/BlockComment.vim'
    use 'inkarkat/vim-mark'
    use 'inkarkat/vim-ingo-library'

    use 'benizi/vim-automkdir'

    use 'ntpeters/vim-better-whitespace'
    use 'godlygeek/tabular'
    use 'kien/rainbow_parentheses.vim'
    use 'MattesGroeger/vim-bookmarks'
    use 'vim-scripts/YankRing.vim'
    use 'ojroques/vim-oscyank'
    use 'sbdchd/neoformat'
    use 'scrooloose/nerdcommenter'
    use 'simnalamburt/vim-mundo'
    use 'tpope/vim-surround'

    use 'yonchu/accelerated-smooth-scroll'
    use 'kien/tabman.vim'
    use 'terryma/vim-expand-region'

    use 'vim-scripts/LargeFile'
    use 'stesen/occur.vim'

    use 'kana/vim-fakeclip'

    use 'tpope/vim-eunuch'

    use 'voldikss/vim-floaterm'

    use 'wellle/targets.vim'

    use 'roxma/vim-paste-easy'

    use 'DanilaMihailov/beacon.nvim'

    use 'ldelossa/litee.nvim'
    use 'ldelossa/litee-calltree.nvim'
    use {'neoclide/coc.nvim', branch = 'release'}

    --use 'simrat39/symbols-outline.nvim'
    use {
        'stevearc/aerial.nvim',
        config = function() require('aerial').setup() end
    }

    use 'simrat39/symbols-outline.nvim'
    use 'liuchengxu/vista.vim'
    -- use 'preservim/tagbar'
    -- use 'lvht/tagbar-markdown'

    use 'startup-nvim/startup.nvim'

    use 'vim-scripts/headerguard'

    use 'sheerun/vim-polyglot'

    use 'kalcutter/vim-gn'

    use 'gen740/SmoothCursor.nvim'

    use 'ggandor/leap.nvim'

    use 'mrjones2014/legendary.nvim'

    use 'mmarchini/bpftrace.vim'

    use 'monkoose/matchparen.nvim'

    -- Automatically set up your configuration after cloning packer.nvim
    -- Put this at the end after all plugins
    if PACKER_BOOTSTRAP then
        require("packer").sync()
    end
end)
